/**
 * @Auther: MFM
 * @Date: 2022/3/15 - 03 - 15 - 13:21
 * @version: 1.0
 */

public class LinkedStackDemo<E> implements Stack<E>{
    /*
     * 栈
     * 只能从一端添加，只能从这一端取出，将这一端成为栈顶
     * 先进后出
     *
     * 方法：入栈（压栈） void push（E）
     *      出栈       E pop（）
     *       查看栈顶元素 E peek（）
     *       查看栈内有多少元素 int getSize（）
     *       查看栈是否为空 boolean isEmpty（）
     *
     * 扩充：如果对空栈进行出栈操作 称为 栈下溢
     *       如果size>capacity 称为 栈上溢
     * */

    //底层链表
    private LinkedDemo<E> linked;

    //压栈
    @Override
    public void push(E e) throws Exception {
        if (linked.getSize()>10){
            return;
        }
        linked.addLast(e);
    }

    //出栈
    @Override
    public E pop() throws Exception {
        if (linked.getSize()==0){
            return null;
        }

        return linked.delete(linked.getSize());
    }

    //查看栈顶
    @Override
    public E peek() throws Exception {
        return linked.find(linked.getSize());
    }

    //获得栈内元素
    @Override
    public int getSize() throws Exception {
        return linked.getSize();
    }

    //判断是否为空
    @Override
    public boolean isEmpty() throws Exception {
        return linked.getSize()==0;
    }
}
